// 声明专门的函数用来在分配Auth 的模态框中显示Auth 的树形结构数据
function fillAuthTree() {
    var ajaxResult = $.ajax({
        "url":"assgin/get/all/auth.json",
        "type":"post",
        "dataType":"json",
        "async":false
    })

    // 判断状态码是否为200
    if(ajaxResult.status != 200){
        layer.msg("失败！失败状态码为："+status+" 说明信息="+ajaxResult.statusText);
    }

    // 成功后拿到data，这个data是AuthList
    var resultEntity = ajaxResult.responseJSON;
    var authList = resultEntity.data;

    // 把result作为TreeNode参数传到ZTree的函数里
    var setting = {
        // auth想做成树形结构有两种方法
        // 1.像Menu一样，在实体类中加入List<Auth> children 和 open变量
        // 2.交给zTree，只需要声明simpleData true
        data: {
            simpleData: {
                // 声明后就是简单JSON数据，无需设置Children
                enable: true,
                // pIdKey是用来存放父节点的id，默认设置字段为pid。可以通过以下配置修改父节点字段名
                pIdKey: "categoryId"
            },
            // zTree显示默认为name属性的值，通过下面配置修改我们想要的字段作为显示值
            key: {
                name: "title"
            }
        },
        // 设置 zTree 的节点上是否显示 checkbox / radio
        check: {
            enable: true,
            // 勾选框类型(checkbox 或 radio）[setting.check.enable = true 时生效]
            // 默认值："checkbox"
            chkStyle: "checkbox"
            // 勾选 checkbox 对于父子节点的关联关系
            // Y 属性定义 checkbox 被勾选后的情况；
            // N 属性定义 checkbox 取消勾选后的情况；
            // "p" 表示操作会影响父级节点；
            // "s" 表示操作会影响子级节点。
            // chkboxType: { "Y": "p", "N": "s" }
        }
    }

    //console.log(authList);
     $.fn.zTree.init($("#authTreeDemo"), setting, authList);

    // 展开 / 折叠 全部节点
    var treeObj = $.fn.zTree.getZTreeObj("authTreeDemo");
    treeObj.expandAll(true);

    // 回显被勾选数据
    ajaxResult = $.ajax({
        "url":"assign/get/assigned/auth/id/by/role/id.json",
        "type":"post",
        "data":{
            "roleId":window.roleId
        },
        "async":false
    })

    if(ajaxResult.status != 200){
        layer.msg("失败！失败状态码为："+status+" 说明信息="+ajaxResult.statusText);
    }

    var authIdArray = [];
    authIdArray = ajaxResult.responseJSON.data;
    console.log(authIdArray);
    for(var i=0;i<authIdArray.length;i++){
        var authId = authIdArray[i];
        // 通过id属性来获取treeNode当前节点
        var treeNode = treeObj.getNodeByParam("id",authId);
        // checked属性是为了设置勾选属性开启
        var checked = true;
        // checkTypeFlag属性表示父子节点不联动，因为做保存操作的时候，会把选中的提交，这样父子节点都会同时提交
        var checkTypeFlag = false;
        treeObj.checkNode(treeNode,checked,checkTypeFlag);
    }

}

// 声明函数显示确认模态框
function showConfirmModal(roleArray) {
    // 打开模态框
    $("#confirmModal").modal('show');
    // 清除模态框旧数据
    $("#roleNameDiv").empty();
    window.roleIdArray = [];
    //遍历roleArray数组
    for(var i=0;i<roleArray.length;i++){
        var role = roleArray[i];
        var roleName = role.roleName;
        var roleId = role.roleId;
        console.log("myrole-js:"+roleName);
        // 调用数组对象的push()方法可存入新数据
        roleIdArray.push(roleId);
        $("#roleNameDiv").append(roleName+"<br/>");
    }
}

//执行分页，任何时候执行此函数都会初始化页面
function generatePage(){

    // 1.获取分页数据
    var pageInfo = getPageInfoRemote();

    // 2.填充表格
    fillTableBody(pageInfo);

    // 3.加载分页条
    generateNavigator(pageInfo);
    
}

//访问服务端拿到pageInfo数据,必须为同步，不然ajax还没请求，可能页面已经开始拼接了
function getPageInfoRemote() {
    var ajaxResult = $.ajax({
        url:"role/get/page/info.json",
        type:"post",
        data:{
            pageNum:window.pageNum,
            pageSize:window.pageSize,
            keyword:window.keyword
        },
        async:false,
        dataType:"json"
    });
    console.log(ajaxResult);

    // ajaxResult返回的是很多函数和数据的集合
    // 其中我们需要:状态码 status,状态信息 statusText,成功请求返回的data（相当于ajax success后返回的数据） responseJson
    // 判断状态码是否是200,如果不是200，说明发生错误，那么显示提示消息
    var statusCode = ajaxResult.status;
    console.log(statusCode);
    if(statusCode!=200){
        layer.msg("失败！失败状态码为："+status+" 说明信息="+ajaxResult.statusText);
        return null;
    }

    // 判断返回的ResultEntity的返回数据是否是FAILED
    var resultEntity = ajaxResult.responseJSON;
    var result = resultEntity.result;
    if(result == "FAILED"){
        layer.msg(resultEntity.message);
        return false;
    }

    //如果状态码没问题，且ResultEntity返回结果为success
    var pageInfo = resultEntity.data;
    return pageInfo;

}

//使用pageInfo.list取数据填充tbody
function fillTableBody(pageInfo){
    // 清除rolePageBody数据，不然点翻页的时候，数据会不断的拼接pa
    $("#rolePageBody").empty();
    // 如果keyword查询为空，那么total会为0，那么翻页导航条也不显示
    $("#Pagination").empty();

    // 1.判断一下pageInfo
    if(pageInfo == null || pageInfo == undefined || pageInfo.list == null || pageInfo.list.length == 0){
        $("#rolePageBody").append("<tr><td colspan='4'>抱歉！没找到相关的数据！</td></tr>>")
    }

    // 2.弱pageInfo不为空,遍历list数据进行标签的拼接
    for (var i = 0; i < pageInfo.list.length; i++) {
        var role = pageInfo.list[i];
        var id = role.id;
        var name = role.name;

        var numTd = "<td>"+(i+1)+"</td>";
        var checkboxTd = "<td><input class='itemBox' id="+id+" type='checkbox'></td>";
        var nameTd = "<td>"+name+"</td>";
        var checkBtn = "<button type='button' class='btn btn-success btn-xs'><i id="+id+" class=' glyphicon glyphicon-check'></i></button>";
        var pencilBtn = "<button type='button' class='btn btn-primary btn-xs'><i id="+id+" class=' glyphicon glyphicon-pencil'></i></button>";
        var removeBtn = "<button type='button' class='btn btn-danger btn-xs'><i id="+id+" class=' glyphicon glyphicon-remove'></i></button>";
        var btnTd = "<td>"+checkBtn+pencilBtn+removeBtn+"</td>";

        var tr = "<tr>"+numTd+checkboxTd+nameTd+btnTd+"</tr>";
        $("#rolePageBody").append(tr);

    }

}

//相当于jsp里面的initPagination()
function generateNavigator(pageInfo){
// 获取总记录数
    var totalRecord = pageInfo.total;
// 声明相关属性
    var properties = {
        "num_edge_entries": 3,
        "num_display_entries": 5,
        "callback": pageNationCallBack,
        "items_per_page": pageInfo.pageSize,
        "current_page": pageInfo.pageNum - 1,
        "prev_text": "上一页",
        "next_text": "下一页"
    }
// 调用pagination()函数
    $("#Pagination").pagination(totalRecord, properties);
}

//Pagination的回调函数
function pageNationCallBack(pageIndex,JQuery){
    //修改window.pageNum属性
    window.pageNum = pageIndex+1;
    //重新加载页面
    generatePage();
    return false;
}